package com.mingzhi.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JwtUtils {

    // 秘钥
    private static final String SECRET_KEY = "secret";

    // 令牌过期时间，设置为12小时
    private static final int EXPIRATION_TIME_HOURS = 12 * 60 * 60 * 1000;

    /**
     * 生成JWT令牌
     *
     * @return 生成的JWT令牌
     */
    public static String generateToken(Map<String, Object> claims) {
        // 生成Token
        return Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY) // 签名
                .addClaims(claims)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME_HOURS))
                .compact(); // 压缩生成xxx.xxx.xxx
    }

    /**
     * 解析JWT令牌
     *
     * @param token 待解析的JWT令牌
     * @return 解析后的Claims对象
     */
    public static Claims parseToken(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
    }

    // 测试方法
    public static void main(String[] args) {
        // 测试生成令牌
        Map<String, Object> payload = new HashMap<>();
        payload.put("sub", "1234567890");
        payload.put("name", "John Doe");
        payload.put("admin", true);

        String token = generateToken(payload);
        System.out.println("Generated Token: " + token);

        // 测试解析令牌
        Claims claims = parseToken(token);
        System.out.println("Parsed Claims: " + claims);
    }
}
